﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ProgNetComponentsDx.Browsers;
using System.Diagnostics;
using System.IO;
using ProgNetComponents.Classes;
using ProgNetComponentsDx.Forms;
using ProgNetComponentsDx.Options;
using DevExpress.XtraEditors.Repository;
using ProgNetComponents.Data.SqlCe;
using DevExpress.XtraGrid.Views.Grid;

namespace BuildHelper.Work.OperacjeNaPlikach
{
    public partial class OperacjeNaPlikachForm : MyBaseSqlCeGridForm
    {
        #region static operations

        public static void SaveNewGroup(Form sender, List<string> pliki)
        {
            InputForm f = new InputForm();
            f.InputMask = ".*{0,50}";
            f.InputMaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
            f.ValidateValue += new ObjectValidationEventHandler(f_ValidateText);
            string nazwa = f.ShowInputDialog("Nowa Grupa Plików", "Nazwa");
            if (nazwa.IsNotNull())
            {
                BuildHelper.Setup.Pliki.PlikiDataSet ds = new Setup.Pliki.PlikiDataSet();
                BuildHelper.Setup.Pliki.PlikiDataSet.STP_GRUPY_PLIKOWRow gr = ds.STP_GRUPY_PLIKOW.AddSTP_GRUPY_PLIKOWRow(nazwa);

                SqlCeDataManager sqlCeDataManager1 = null;
                try
                {
                    sqlCeDataManager1 = new SqlCeDataManager();
                    sqlCeDataManager1.AddTableDef(ds.STP_GRUPY_PLIKOW, "SELECT * FROM STP_GRUPY_PLIKOW WHERE STP_GRPL_ID = @GRUPA");
                    sqlCeDataManager1.AddTableDef(ds.STP_PLIKI, "SELECT * FROM STP_PLIKI WHERE STP_PL_GRUPA = @GRUPA");

                    DodajPlikiDoGrupy(ds, pliki);
                    if (sqlCeDataManager1.UpdateDataSet(ds))
                    {
                        BrowserCache.RefreshCache(ds);
                        sender.ShowDxInfoDialog("Grupa dodana");
                    }
                    else
                    {
                        sender.ShowDxErrorDialog("Błąd dodawania grupy");
                    }
                }
                finally
                {
                    if (sqlCeDataManager1 != null)
                    {
                        try { sqlCeDataManager1.Dispose(); }
                        catch { }
                    }
                }
            }
            f.Dispose();
        }
        public static void SaveGroup(Form sender, bool clear, List<string> pliki)
        {
            ObjectDialogResult dlg = BrowserCache.ShowBrowserDialog(Init.InitFormBrowserNames.Setup.GrupyPlikow);
            if (dlg.DialogResult == System.Windows.Forms.DialogResult.OK)
            {
                NamedObject parametr = new NamedObject("@GRUPA", dlg.Value);
                BuildHelper.Setup.Pliki.PlikiDataSet ds = new Setup.Pliki.PlikiDataSet();
                SqlCeDataManager sqlCeDataManager1 = null;
                try
                {
                    sqlCeDataManager1 = new SqlCeDataManager();
                    sqlCeDataManager1.AddTableDef(ds.STP_GRUPY_PLIKOW, "SELECT * FROM STP_GRUPY_PLIKOW WHERE STP_GRPL_ID = @GRUPA");
                    sqlCeDataManager1.AddTableDef(ds.STP_PLIKI, "SELECT * FROM STP_PLIKI WHERE STP_PL_GRUPA = @GRUPA");

                    if (sqlCeDataManager1.FillDataSet(ds, parametr) && ds.STP_GRUPY_PLIKOW.Rows.Count == 1)
                    {
                        if (clear)
                            ds.STP_PLIKI.DeleteRows();
                        DodajPlikiDoGrupy(ds, pliki);
                        if (sqlCeDataManager1.UpdateDataSet(ds))
                        {
                            BrowserCache.RefreshCache(ds);
                            sender.ShowDxInfoDialog("Grupa uaktuaniona");
                        }
                        else
                        {
                            sender.ShowDxErrorDialog("Błąd uaktualniania grupy");
                        }
                    }
                    else
                    {
                        sender.ShowDxErrorDialog("Błąd wczytywania grupy plików");
                    }
                }
                finally
                {
                    if (sqlCeDataManager1 != null)
                    {
                        try { sqlCeDataManager1.Dispose(); }
                        catch { }
                    }
                }
            }
        }

        private static void f_ValidateText(object sender, ObjectValidateEventArgs e)
        {
            if (e.Value.IsNull())
                e.ValidationErrorMsg = "Podaj nazwę";
            else if (BrowserCache.IsValidDisplayMember(Init.InitFormBrowserNames.Setup.GrupyPlikow, false, e.Value))
                e.ValidationErrorMsg = "Nazwa powinna być unikalna";
        }
        private static void DodajPlikiDoGrupy(BuildHelper.Setup.Pliki.PlikiDataSet ds, List<string> pliki)
        {
            foreach (string plik in pliki)
            {
                ds.STP_PLIKI.AddSTP_PLIKIRow(plik, ds.STP_GRUPY_PLIKOW[0]);
            }
        }
        #endregion

        private bool GetBrancz(bool brancz1, out string brancz)
        {
            if (brancz1)
                brancz = lueBrancz1.EditValue.AsString();
            else
                brancz = lueBrancz2.EditValue.AsString();
            if (brancz.IsNullOrEmpty())
            {
                this.ShowDxInfoDialog("Wybierz brancza " + (brancz1 ? "1" : "2"));
                return false;
            }
            return true;
        }

        private Process procZmiany;
       
        private NamedObject parametr = new NamedObject("@GRUPA", null);
        public OperacjeNaPlikachForm()
        {
            InitializeComponent();
            if (!this.IsDesignMode())
            {
                Setup.Brancze.BranczeTools.ActiveBranchChanged += new EventHandler(BranczeTools_ActiveBranchChanged);
                lueBrancz1.EditValue = Setup.Brancze.BranczeTools.ActiveBranch;
                sqlCeDataManager1.AddTableDef(grupyPlikowDataSet.STP_GRUPY_PLIKOW, "SELECT * FROM STP_GRUPY_PLIKOW WHERE STP_GRPL_ID = @GRUPA");
                sqlCeDataManager1.AddTableDef(grupyPlikowDataSet.STP_PLIKI, "SELECT * FROM STP_PLIKI WHERE STP_PL_GRUPA = @GRUPA");
                this.Controls.Remove(gcMain);
                splitContainerControl1.Panel2.Controls.Add(gcMain);
                panelControl1.Dock = DockStyle.Fill;

                int size = 16;
                SetImage(repOtworz, commonImageCollectionFull1.Images[28].ResizeImage(size, size));
                SetImage(repOtworzKat, commonImageCollectionFull1.Images[33].ResizeImage(size, size));
                SetImage(repLog, Properties.Resources.tortoise_log24.ResizeImage(size, size));
                SetImage(repUpdate, Properties.Resources.tortoise_up24.ResizeImage(size, size));
                SetImage(repZmiany, Properties.Resources.tortoise_zm24.ResizeImage(size, size));
                SetImage(repBlame, Properties.Resources.tortoise_bl24.ResizeImage(size, size));
                SetImage(repDevenv, Properties.Resources.vs_proj24.ResizeImage(size, size));
            }
        }
       
        private void SetImage(RepositoryItemButtonEdit rep, Image img)
        {
            rep.Buttons[0].Image = img;
            rep.Buttons[0].ImageLocation = DevExpress.XtraEditors.ImageLocation.MiddleLeft;
            rep.Buttons[1].Image = img;
            rep.Buttons[1].ImageLocation = DevExpress.XtraEditors.ImageLocation.MiddleLeft;
        }

        void BranczeTools_ActiveBranchChanged(object sender, EventArgs e)
        {
            lueBrancz1.EditValue = Setup.Brancze.BranczeTools.ActiveBranch;
        }

        private void AddFile(string file, string grupa)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new Action<string, string>(AddFile), file, grupa);
                return;
            }
            string fileName = file.Replace('/', '\\');
            if (!file.StartsWith("%ROOT%"))
            {
                if (file.XMatch("\\nd_src\\gene\\".XEscape()))
                {
                    fileName = "%ROOT%\\" + file.XReplace(".*?"+"\\nd_src\\gene\\".XEscape(),"").TrimStart('\\');
                }
            }
            DataRow r = plikiDataSet.WRK_PLIKI.SelectFirstRow("WRK_PLK_PLIK = " + fileName.EscapeSql() + " AND WRK_PLK_GRUPA = " + grupa.EscapeSql());
            if (r != null)
                r["WRK_PLK_ZAZNACZ"] = true;
            else
            {
                plikiDataSet.WRK_PLIKI.AddWRK_PLIKIRow(fileName, grupa, true, false);
            }
        }
       
       
        private void repDoubleButtons_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            DataRow r = gvMain.GetFocusedDataRow();
            if (r != null)
            {
                string brancz= "";
                if (!GetBrancz(e.Button.Tag.AsString() == "1", out brancz))
                    return;
                List<string> files = GetSelectedFiles(brancz, true);
                if (files.Count ==1 )
                {
                    if (gvMain.FocusedColumn == colDevenv)
                    {
                        if (!GlobalTools.FilesTools.OpenFileInDevEnv(files[0]))
                        {
                            this.ShowDxErrorDialog("Błąd otwierania pliku w VisualStudio.\nBrak procesu devenv?");
                        }
                    }
                    if (gvMain.FocusedColumn == colOtworz)
                    {
                        GlobalTools.FilesTools.OpenFiles(EditorSource.OperacjeNaPlikach, files.ToArray());
                    }
                    if (gvMain.FocusedColumn == colOtworzKat)
                    {
                        GlobalTools.FilesTools.OpenDirs(files.ToArray());
                    }
                    else if (gvMain.FocusedColumn == colLog)
                    {
                        GlobalTools.TortoiseTools.RunTortoiseGlobal(brancz, "log", files[0]);
                    }
                    else if (gvMain.FocusedColumn == colUpdate)
                    {
                        GlobalTools.TortoiseTools.RunTortoiseGlobal(brancz, "update", files[0]);
                    }
                    else if (gvMain.FocusedColumn == colZmiany)
                    {
                        GlobalTools.TortoiseTools.RunTortoiseGlobal(brancz, "repostatus", files[0]);
                    }
                    else if (gvMain.FocusedColumn == colBlame)
                    {
                        GlobalTools.TortoiseTools.RunTortoiseGlobal(brancz, "blame", files[0]);
                    }
                }
            }
        }

        private void rep_colWinMerge_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            if (gvMain.GetFocusedDataRow() == null)
                return;
            string brancz1 = "";
            if (!GetBrancz(true, out brancz1))
                return;
            string brancz2 = "";
            if (!GetBrancz(false, out brancz2))
                return;
            GlobalTools.FilesTools.RunWinMerge(GetSelectedFiles(brancz1, true), GetSelectedFiles(brancz2, true));
        }
        
        #region zmiany
        private void WczytajZmiany(bool brancz1)
        {
            if (procZmiany == null)
            {
                if (!GlobalTools.TortoiseTools.CanUseTortoiseSvn())
                {
                    this.ShowDxInfoDialog("Brak TortoiseSvn. Sprawdź opcje:\n" + GlobalTools.GetOptionPath(Init.InitFormOptionNames.Setup_Group.Rozne.TortoiseSvn));
                    return;
                }
                string brancz = "";
                if (!GetBrancz(brancz1, out brancz))
                    return;
                DataRow r = BrowserCache.GetRowForValue(Init.InitFormBrowserNames.Setup.Brancze, brancz);
                if (r != null)
                {
                    string root = r["STP_BR_KATALOG"].AsString();
                    procZmiany = GlobalTools.CreateCMDProcess(procZmiany_Data);
                    StartMarque("Wczytywanie zmian brancza " + brancz);
                    GlobalTools.TortoiseTools.AddSvnToPath(procZmiany); 
                    string path = root + "\\nd_src\\gene";
                    procZmiany.Execute("svn st " + path.AddDoubleQuotes());
                    procZmiany.Echo("Koniec");
                }
            }
            else
            {
                this.ShowDxInfoDialog("Operacja w toku");
            }
        }
        string maskModification = "^\\s*M\\s+(.*)";
        string maskAll = "^\\s*(M|D|A)\\s+(.*)";

        private void procZmiany_Data(object sender, DataReceivedEventArgs e)
        {
            if (procZmiany == null)
                return;
            string str = e.Data.AsString();
            if (str.XMatch(maskModification))
            {
                AddFile(str.GetFirstMatch(maskModification), "Zmiany");
            }
            else if(str == "echo Koniec" || str == "Koniec")
            {
                try
                {
                    procZmiany.KillProcessTree();
                    procZmiany.Dispose();
                }
                catch { }
                procZmiany = null;
                StopMarque();
            }
        }
        private void StopMarque()
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new Action(StopMarque));
                return;
            }
            marqueeProgressBarControl1.Properties.Stopped = true;
            marqueeProgressBarControl1.Text = "";
        }
        private void StartMarque(string text)
        {
            marqueeProgressBarControl1.Properties.Stopped = false;
            marqueeProgressBarControl1.Text = text;
        }
        private void btnWczytajZmiany1_Click(object sender, EventArgs e)
        {
            WczytajZmiany(true);
        }

        private void btnWczytajZmiany2_Click(object sender, EventArgs e)
        {
            WczytajZmiany(false);
        }
        #endregion

        #region pliki rewizji
        private void WczytajPlikiRevizji(bool brancz1)
        {
            if (procZmiany == null)
            {
                string brancz = "";
                if (!GetBrancz(brancz1, out brancz))
                    return;
                ProgNetComponentsDx.Forms.InputForm i = new ProgNetComponentsDx.Forms.InputForm();
                i.InputMaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
                i.InputMask = "[0-9]*";
                string str = i.ShowInputDialog("Rewizja", "Rewizja");
                if (str.IsNotNull())
                {
                    rev = str;
                    if (!GlobalTools.TortoiseTools.CanUseTortoiseSvn())
                    {
                        this.ShowDxInfoDialog("Brak TortoiseSvn. Sprawdź opcje:\n" + GlobalTools.GetOptionPath(Init.InitFormOptionNames.Setup_Group.Rozne.TortoiseSvn));
                        return;
                    }
                    DataRow r = BrowserCache.GetRowForValue(Init.InitFormBrowserNames.Setup.Brancze, brancz);
                    if (r != null)
                    {
                        string root = r["STP_BR_KATALOG"].AsString().TrimEnd('\\') + "\\nd_src\\gene";
                        StartMarque("Wczytywanie plików revizji " + rev + " brancza " + brancz);
                        procZmiany = GlobalTools.CreateCMDProcess(procPlikiRewizji_Data);
                        GlobalTools.TortoiseTools.AddSvnToPath(procZmiany); 
                        procZmiany.CdDir(root);
                        procZmiany.Execute("svn log -r " + rev + " --verbose");
                    }
                    procZmiany.Echo("Koniec");
                }
            }
            else
            {
                this.ShowDxInfoDialog("Operacja w toku.");
            }
        }
        string rev = "";
        private void procPlikiRewizji_Data(object sender, DataReceivedEventArgs e)
        {
            string str = e.Data.AsString();
            if (str.XMatch(maskAll))
            {
                str = str.GetFirstMatch(maskAll, 2);
                str = str.TrimStart('/');
                str = str.XReplace("^branches/([^/]*)/", "%ROOT%/");
                str = str.XReplace("^trunk/", "%ROOT%/");
                AddFile(str, "Zmiany Rewizji "+ rev);
            }
            else if (str == "echo Koniec" || str == "Koniec")
            {
                try
                {
                    procZmiany.KillProcessTree();
                    procZmiany.Dispose();
                }
                catch { }
                procZmiany = null;
                StopMarque();
            }
        }

        private void btnWczytajPlikiRewizji1_Click(object sender, EventArgs e)
        {
            WczytajPlikiRevizji(true);
        }

        private void btnWczytajPlikiRewizji2_Click(object sender, EventArgs e)
        {
            WczytajPlikiRevizji(false);
        }
        #endregion

        #region Update
       
        private List<string> GetSelectedFiles(string brancz, bool focusedOnly = false)
        {
            List<string> list = new List<string>();
            DataRow r;
            r = BrowserCache.GetRowForValue(Init.InitFormBrowserNames.Setup.Brancze, brancz);
            if (r != null)
            {
                string root = r["STP_BR_KATALOG"].AsString();
                root = root.TrimEnd('\\') + "\\nd_src\\gene\\";
                if (focusedOnly)
                {
                    r = gvMain.GetFocusedDataRow();
                    if (r != null)
                    {
                        list.Add(GlobalTools.GetFullPath(r["WRK_PLK_PLIK"].AsString(), root));
                    }
                }
                else
                {
                    for (int i = 0; i < gvMain.RowCount; i++)
                    {
                        r = gvMain.GetDataRow(i);
                        if (r != null)
                        {
                            if (r["WRK_PLK_ZAZNACZ"].AsBool())
                            {
                                list.Add(GlobalTools.GetFullPath(r["WRK_PLK_PLIK"].AsString(), root));
                            }
                        }
                    }
                }
            }
            return list;
        }
        private void Update(bool brancz1)
        {
            string brancz = "";
            if (!GetBrancz(brancz1, out brancz))
                return;
            List<string> list = GetSelectedFiles(brancz);
            if (list.Count > 0)
            {
                string file = Path.GetTempFileName();
                (Constants.NewLineLinux + list.AsString(Constants.NewLineLinux)).WriteToFile(file, Encoding.Unicode);
                GlobalTools.TortoiseTools.RunTortoise(brancz, "update", false, false, file);
            }
        }
        private void btnUpdate1_Click(object sender, EventArgs e)
        {
            Update(true);
        }

        private void btnUpdate2_Click(object sender, EventArgs e)
        {
            Update(false);
        }
        #endregion
        #region open
        private void OpenFiles(bool brancz1)
        {
            string brancz = "";
            if (!GetBrancz(brancz1, out brancz))
                return;
            List<string> list = GetSelectedFiles(brancz);
            GlobalTools.FilesTools.OpenFiles( EditorSource.OperacjeNaPlikach, list.ToArray());
        }
        
        private void btnOtworz1_Click(object sender, EventArgs e)
        {
            OpenFiles(true);
        }

        private void btnOtworz2_Click(object sender, EventArgs e)
        {
            OpenFiles(false);
        }
        #endregion
        protected override bool GetRecords()
        {
            bool res =base.GetRecords();
            gvMain.CollapseAllGroups();
            return res;
        }
        private void btnPorownaj1_Click(object sender, EventArgs e)
        {
            string brancz1 = "";
            if (!GetBrancz(true, out brancz1))
                return;
            string brancz2 = "";
            if (!GetBrancz(false, out brancz2))
                return;
            List<string> list1 = GetSelectedFiles(brancz1);
            List<string> list2 = GetSelectedFiles(brancz2);
            GlobalTools.FilesTools.RunWinMerge(list1, list2);
        }

        private void btnWczytajGrupę_Click(object sender, EventArgs e)
        {
            ReadGroup(true);
        }
        private void ReadGroup(bool clear)
        {
            ObjectDialogResult dlg = BrowserCache.ShowBrowserDialog(Init.InitFormBrowserNames.Setup.GrupyPlikow);
            if (dlg.DialogResult == System.Windows.Forms.DialogResult.OK)
            {
                parametr.Value = dlg.Value;
                grupyPlikowDataSet.Clear();
                grupyPlikowDataSet.AcceptChanges();
                if (sqlCeDataManager1.FillDataSet(grupyPlikowDataSet, parametr) && grupyPlikowDataSet.STP_GRUPY_PLIKOW.Rows.Count == 1)
                {
                    if (clear)
                        plikiDataSet.WRK_PLIKI.DeleteRows();
                    
                    string grupa = grupyPlikowDataSet.STP_GRUPY_PLIKOW[0]["STP_GRPL_NAZWA"].AsString();
                    foreach (DataRow r in grupyPlikowDataSet.STP_PLIKI.Rows)
                    {
                        AddFile(r["STP_PL_PLIK"].AsString(), grupa);
                    }
                }
                else
                {
                    this.ShowDxErrorDialog("Błąd wczytywania grupy plików");
                }
            }
        }
        private void btnDodajGrupe_Click(object sender, EventArgs e)
        {
            ReadGroup(false);
        }

        private void btnZapiszGrupe_Click(object sender, EventArgs e)
        {
            SaveNewGroup(this, getPliki());
        }


        
        private List<string> getPliki()
        {
            List<string> list = new List<string>();
            DataRow r;
            gvMain.ExpandAllGroups();
            for (int i = 0; i < gvMain.RowCount; i++)
            {
                r = gvMain.GetDataRow(i);
                if (r != null)
                    list.AddIfNotExist(r["WRK_PLK_PLIK"].AsString());
            }
            return list;
        }
        
        private void btnZapiszJakoGrupe_Click(object sender, EventArgs e)
        {
            SaveGroup(this, true, getPliki());
        }

        private void btnDodajDoGrupy_Click(object sender, EventArgs e)
        {
            SaveGroup(this, false, getPliki());
        }

        private void btnZaznaczWszystkoBudowanie_Click(object sender, EventArgs e)
        {
            DataRow r;
            gvMain.BeginSort();
            for (int i = 0; i < gvMain.RowCount; i++)
            {
                r = gvMain.GetDataRow(i);
                if (r != null)
                    r.SetColVal("WRK_PLK_ZAZNACZ", true);
            }
            gvMain.EndSort();
        }

        private void btnOdznaczWszystkoBudowanie_Click(object sender, EventArgs e)
        {
            DataRow r;
            gvMain.BeginSort();
            for (int i = 0; i < gvMain.RowCount; i++)
            {
                r = gvMain.GetDataRow(i);
                if (r != null)
                    r.SetColVal("WRK_PLK_ZAZNACZ", false);
            }
            gvMain.EndSort();
        }

        private void btnDodajZeSchowka_Click(object sender, EventArgs e)
        {
            string str = Clipboard.GetText();
            if (str.IsNotNull())
            {
                List<string> files = str.ToLines();
                if (files.Count > 0)
                {
                    string grupa = "";
                    if (OptionCache.GetOptionBoolValue(Init.InitFormOptionNames.Work_Group.OperacjeNaPlikach.PytajOGrupePrzyDodawaniuZeSchowka))
                    {
                        grupa = InputForm.InputDialog("Grupa", "Grupa", ".{0,50}");
                    }
                    foreach (string file in files)
                    {
                        AddFile(file, grupa);
                    }
                }
            }
        }

        private void rep_WRK_PLK_PLIK_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            string file = e.NewValue.AsString();
            string fileName = file.Replace('/', '\\');
            if (!file.StartsWith("%ROOT%"))
            {
                if (file.XMatch("\\nd_src\\gene\\".XEscape()))
                {
                    fileName = "%ROOT%\\" + file.XReplace(".*?" + "\\nd_src\\gene\\".XEscape(), "").TrimStart('\\');
                }
            }
            if (file != fileName)
                e.NewValue = fileName;
        }

        private void btnUsunWszystkie_Click(object sender, EventArgs e)
        {
            List<DataRow> list = new List<DataRow>();
            DataRow r;
            
            for (int i = 0; i < gvMain.RowCount; i++)
            {
                r = gvMain.GetDataRow(i);
                if (r != null)
                    list.Add(r);
            }
            foreach (DataRow r2 in list)
                r2.Delete();
        }

        private void OpenDirs(bool brancz1)
        {
            string brancz = "";
            if (!GetBrancz(brancz1, out brancz))
                return;
            List<string> list = GetSelectedFiles(brancz);
            GlobalTools.FilesTools.OpenDirs(list.ToArray());
        }
        private void btnOtworzKat1_Click(object sender, EventArgs e)
        {
            OpenDirs(true);
        }

        private void btnOtworzKat2_Click(object sender, EventArgs e)
        {
            OpenDirs(false);
        }

        private void lueBrancz1_EditValueChanged(object sender, EventArgs e)
        {
            DataRow r = BrowserCache.GetRowForValue(Init.InitFormBrowserNames.Setup.Brancze, lueBrancz1.EditValue);
             if (r != null)
             {
                 string root = r["STP_BR_KATALOG"].AsString();
                 root = root.TrimEnd('\\') + "\\nd_src\\gene";
                 rep_WRK_PLK_PLIK.RootDir = root;
             }
        }

    }
}
